package controller

import (
	"first_try/common"
	"first_try/model"
	"fmt"
	"github.com/gin-gonic/gin"
	"gorm.io/gorm"
	"net/http"
)

//找到所有货代公司信息，并传回到网页上
func E_Set_All_Companys(c *gin.Context) {
	DB := common.GetDB()
	var company []model.Company //结构体数组
	//显示所有的订单信息
	result := DB.Table("company_id").Find(&company)
	if result != nil {
		fmt.Println("!!!")
	}
	fmt.Println(company)
	c.JSON(http.StatusOK, gin.H{
		"code":         "200",
		"orders_lists": company,
		"msg":          "成功",
	})
}

//查找某一指定货代公司信息（网页用）
func E_Get_Company(c *gin.Context) {
	DB := common.GetDB()
	var test model.Company
	var test2 []model.Company
	request := make(map[string]interface{})

	//获取参数
	fmt.Println(request)
	c.ShouldBind(&request) //将前端传过来的数据绑定到request上
	fmt.Println(request)
	test.Company_id = request["id"].(string) //取得相应的map值 放到结构体上
	//查询该订单是否存在（连接数据库查询）
	DB.Where("orders_id = ?", test.Company_id).First(&test2)
	if test2[0].Company_id != "" {
		fmt.Println("成功找到该公司")
		c.JSON(200, gin.H{
			"code":      "200",
			"orders_id": test2, //传一个对象
			"msg":       "成功",
		})
	} else {
		c.JSON(404, gin.H{
			"code":      "404",
			"orders_id": test2,
			"msg":       "no",
		})
		fmt.Println("未找到该公司")
	}
}

//增加公司信息（页面用）
func E_Add_Company(c *gin.Context) {
	DB := common.GetDB()
	request := make(map[string]interface{})
	c.ShouldBind(&request)
	var test model.Company
	test.Company_id = request["company_id"].(string)
	test.Company_name = request["company_name"].(string)

	fmt.Println(request)
	//获取到新增公司的所有信息
	if Insert_Company(DB, test) {
		//没找到该公司，可以新建该公司
		c.JSON(200, gin.H{
			"code": "200",
			"msg":  "添加成功",
		})
		fmt.Println("添加成功")
	} else {
		//能找到，就不可以增加该订单公司
		c.JSON(404, gin.H{
			"code": "404",
			"msg":  "添加失败",
		})
		fmt.Println("添加失败")
	}
}

//删除指定公司(网页用)
func E_Delete_Company(c *gin.Context) {
	DB := common.GetDB()
	request := make(map[string]interface{})
	c.ShouldBind(&request)
	var test model.Company
	test.Company_id = request["company_id"].(string)
	if Delete_Company(DB, test) {
		//删除成功
		c.JSON(200, gin.H{
			"code": "200",
			"msg":  "删除成功",
		})
		fmt.Println("删除成功")
	} else {
		//删除失败
		c.JSON(404, gin.H{
			"code": "404",
			"msg":  "删除失败",
		})
		fmt.Println("删除失败")
	}
}

//修改指定公司的信息（页面用）
func E_Modify_Company(c *gin.Context) {
	DB := common.GetDB()
	request := make(map[string]interface{})
	c.ShouldBind(&request)
	var test model.Company
	test.Company_id = request["company_id"].(string)
	test.Company_name = request["company_name"].(string)

	//获取到全部修改信息
	if Modify_Company(DB, test) {
		c.JSON(200, gin.H{
			"code": "200",
			"msg":  "修改成功",
		})
	} else {
		c.JSON(404, gin.H{
			"code": "404",
			"msg":  "修改失败",
		})
	}
}

//查询该订单是否存在
func Find_Company(db *gorm.DB, test model.Company) bool {
	var find_company model.Company
	db.Where("Company_id = ?", test.Company_id).First(&find_company)
	if find_company.Company_id != "" {
		fmt.Println(find_company.Company_id)
		return true
	}
	return false
}

//添加公司
func Insert_Company(db *gorm.DB, test model.Company) bool {
	if Find_Company(db, test) {
		fmt.Println("该公司已经存在！")
		return false
	} else {
		db.Create(&test)
		fmt.Println("添加成功")
		return true
	}
}

//删除公司
func Delete_Company(db *gorm.DB, test model.Company) bool {
	if Find_Company(db, test) {
		fmt.Println("已经找到该公司")
		db.Where("Company_id = ?", test.Company_id).Delete(&test)
		return true
	} else {
		fmt.Println("该公司不存在")
	}
	return false
}

//修改公司
func Modify_Company(db *gorm.DB, test model.Company) bool {
	if Find_Company(db, test) {
		fmt.Println("已经找到该公司")
		db.Model(&test).Where("Company_id = ?", test.Company_id).Updates(
			model.Company{
				Company_id:   test.Company_id,
				Company_name: test.Company_name,
			},
		)
		fmt.Println("修改完成")
		return true
	} else {
		fmt.Println("并不存在该公司")
	}
	return false
}
